/**
 * 指南针工具函数
 */

// 方位常量定义（简化为8个基本方向）
const DIRECTIONS = {
  N: '北',
  NE: '东北',
  E: '东',
  SE: '东南',
  S: '南',
  SW: '西南',
  W: '西',
  NW: '西北'
};

/**
 * 获取方向信息
 * @param {Number} degree - 角度值（0-360）
 * @return {Object} - 包含数值和方向文字的对象
 */
function getDirectionInfo(degree) {
  // 确保角度在0-360范围内
  degree = normalizeDegree(degree);
  
  // 获取最接近的方向
  const directionText = getDirectionText(degree);
  
  return {
    value: Math.round(degree), // 四舍五入取整
    text: directionText
  };
}

/**
 * 规范化角度到0-360范围
 * @param {Number} degree - 任意角度值
 * @return {Number} - 0-360范围内的角度值
 */
function normalizeDegree(degree) {
  degree = degree % 360;
  if (degree < 0) {
    degree += 360;
  }
  return degree;
}

/**
 * 根据角度获取方向文字
 * @param {Number} degree - 角度值（0-360）
 * @return {String} - 方向文字
 */
function getDirectionText(degree) {
  // 方向判断，只使用8个基本方向，每个方向占45度
  if (degree >= 337.5 || degree < 22.5) {
    return DIRECTIONS.N;
  } else if (degree >= 22.5 && degree < 67.5) {
    return DIRECTIONS.NE;
  } else if (degree >= 67.5 && degree < 112.5) {
    return DIRECTIONS.E;
  } else if (degree >= 112.5 && degree < 157.5) {
    return DIRECTIONS.SE;
  } else if (degree >= 157.5 && degree < 202.5) {
    return DIRECTIONS.S;
  } else if (degree >= 202.5 && degree < 247.5) {
    return DIRECTIONS.SW;
  } else if (degree >= 247.5 && degree < 292.5) {
    return DIRECTIONS.W;
  } else if (degree >= 292.5 && degree < 337.5) {
    return DIRECTIONS.NW;
  }
  
  // 默认返回北
  return DIRECTIONS.N;
}

module.exports = {
  getDirectionInfo,
  normalizeDegree,
  getDirectionText
}; 